package com.stellar.auth.domain.authUser;

import com.stellar.auth.controller.admin.authUser.vo.*;
import com.stellar.auth.controller.miniApp.authUser.vo.MiniAppLoginResponseVO;
import com.stellar.web.core.bean.PageResult;
import com.stellar.wechat.core.entity.WxSessionInfo;

import java.util.List;

/**
 * 系统用户信息表领域服务接口
 *
 * @author Jqchan
 * @version 1.0
 * @date 2025-05-16 18:05:32
 */
public interface AuthUserDomainService {

    /**
     * 分页查询
     *
     * @param requestPageVO 分页查询参数
     * @return 分页结果
     */
    PageResult<AuthUserResponseVO> page(AuthUserRequestPageVO requestPageVO);

    /**
     * 更新数据
     *
     * @param requestVO 更新参数
     * @return 是否成功
     */
    Boolean update(AuthUserRequestVO requestVO);

    /**
     * 删除数据
     *
     * @param id 主键ID
     * @return 是否成功
     */
    Boolean delete(Long id);

    /**
     * 新增数据
     *
     * @param requestVO 新增参数
     * @return 是否成功
     */
    Long insert(AuthUserRequestVO requestVO);

    /**
     * 根据主键获取详情
     *
     * @param id 主键ID
     * @return 详情数据
     */
    AuthUserResponseVO get(Long id);

    /**
     * 管理员登陆
     *
     * @param authUserRequestVO
     * @return
     */
    AuthUserLoginResponseVO doLogin(AuthUserRequestVO authUserRequestVO);

    /**
     * 获取用户信息 - 通过用户上下文获取用户Id
     *
     * @return
     */
    AuthUserResponseVO getUserInfo();

    /**
     * 微信小程序快速登陆
     *
     * @param wxSessionInfo
     * @return
     */
    MiniAppLoginResponseVO miniAppLogin(WxSessionInfo wxSessionInfo);

    /**
     * 身份认证
     *
     * @param authUserRequestVO
     * @return
     */
    Boolean identification(AuthUserRequestVO authUserRequestVO);

    /**
     * 启用/封禁用户
     *
     * @param id
     * @return
     */
    Boolean toggleStatus(Long id);

    /**
     * 根据手机号获取用户信息
     *
     * @param phone
     * @return
     */
    AuthUserResponseVO getByPhone(String phone);

    /**
     * 批量查询用户信息
     *
     * @param ids
     * @return
     */
    List<AuthUserResponseVO> batchQueryByIds(List<Long> ids);

    /**
     * 根据学校ID查询用户数量
     *
     * @param id
     * @return
     */
    Long countBySchoolId(Long id);
}
